import%20marimo%0A%0A__generated_with%20%3D%20%220.11.2%22%0Aapp%20%3D%20marimo.App(auto_download%3D%5B%22html%22%5D)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20return%20(mo%2C)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20os%0A%20%20%20%20os.environ%5B'TF_CPP_MIN_LOG_LEVEL'%5D%20%3D%20'3'%0A%20%20%20%20return%20(os%2C)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20tensorflow%0A%20%20%20%20return%20(tensorflow%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22-%20List%20available%20devices%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(tensorflow)%3A%0A%20%20%20%20tensorflow.config.experimental.list_physical_devices()%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22-%20Check%20if%20build%20with%20cuda%20(cuda%20compatible)%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(tensorflow)%3A%0A%20%20%20%20tensorflow.test.is_built_with_cuda()%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%201.%20Import%20%E2%80%93%20%20necessary%20modules%20and%20the%20dataset.%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20tensorflow%20as%20tf%0A%20%20%20%20from%20tensorflow%20import%20keras%0A%20%20%20%20import%20numpy%20as%20np%0A%20%20%20%20import%20matplotlib.pyplot%20as%20plt%0A%20%20%20%20return%20keras%2C%20np%2C%20plt%2C%20tf%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20Download_Data%20%3D%20mo.ui.run_button(label%3D%22Download%20Data%22%2C%20kind%3D%22info%22)%0A%20%20%20%20Download_Data%0A%20%20%20%20return%20(Download_Data%2C)%0A%0A%0A%40app.cell%0Adef%20_(Download_Data%2C%20keras%2C%20mo)%3A%0A%20%20%20%20mo.stop(not%20Download_Data.value)%0A%20%20%20%20(X_train%2C%20y_train)%2C%20(X_test%2C%20y_test)%20%3D%20keras.datasets.cifar10.load_data()%0A%20%20%20%20return%20X_test%2C%20X_train%2C%20y_test%2C%20y_train%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%202.%20Perform%20%20Eda%20%E2%80%93%20check%20data%20and%20labels%20shape%3A%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(X_test%2C%20X_train)%3A%0A%20%20%20%20%23%20checking%20images%20shape%0A%20%20%20%20X_train.shape%2C%20X_test.shape%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(X_train)%3A%0A%20%20%20%20%23%20display%20single%20image%20shape%0A%20%20%20%20X_train%5B0%5D.shape%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(y_train)%3A%0A%20%20%20%20%23%20checking%20labels%0A%20%20%20%20y_train%5B%3A5%5D%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%23%203.%20Apply%20Preprocessing%3A%20%0A%20%20%20%20%20%20%20%20Scaling%20images(NumPy%20array)%20by%20255%20and%20One-Hot%20Encoding%20labels%20to%20represent%20all%20categories%20as%200%2C%20except%20%201%20for%20the%20actual%20label%20in%20%E2%80%98float32.%E2%80%99%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(X_test%2C%20X_train%2C%20keras%2C%20y_test%2C%20y_train)%3A%0A%20%20%20%20%23%20scaling%20image%20values%20between%200-1%0A%20%20%20%20X_train_scaled%20%3D%20X_train%2F255%0A%20%20%20%20X_test_scaled%20%3D%20X_test%2F255%0A%0A%20%20%20%20%23%20one%20hot%20encoding%20labels%0A%20%20%20%20%23%20y_train_encoded%20%3D%20keras.utils.to_categorical(y_train%2C%20num_classes%20%3D%2010%2C%20dtype%20%3D%20'float32')%0A%20%20%20%20%23%20y_test_encoded%20%3D%20keras.utils.to_categorical(y_test%2C%20num_classes%20%3D%2010%2C%20dtype%20%3D%20'float32')%0A%0A%20%20%20%20y_train_encoded%20%3D%20keras.utils.to_categorical(y_train%2C%20num_classes%20%3D%2010)%0A%20%20%20%20y_test_encoded%20%3D%20keras.utils.to_categorical(y_test%2C%20num_classes%20%3D%2010)%0A%20%20%20%20return%20X_test_scaled%2C%20X_train_scaled%2C%20y_test_encoded%2C%20y_train_encoded%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%23%204.%20Model%20Building%3A%20%0A%20%20%20%20%20%20%20%20A%20fn%20to%20build%20a%20neural%20network%20with%20architecture%20as%20below%20with%20compiling%20included%20%3A%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(keras%2C%20tf)%3A%0A%20%20%20%20def%20get_model()%3A%0A%20%20%20%20%20%20%20%20model%20%3D%20keras.Sequential(%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20keras.layers.Input(shape%3D(32%2C32%2C3))%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20tf.keras.layers.Flatten()%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20keras.layers.Dense(3000%2C%20activation%3D'relu')%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20keras.layers.Dense(1000%2C%20activation%3D'relu')%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20keras.layers.Dense(10%2C%20activation%3D'sigmoid')%20%20%20%20%0A%20%20%20%20%20%20%20%20%5D)%0A%20%20%20%20%20%20%20%20model.compile(optimizer%3D'SGD'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20loss%3D'categorical_crossentropy'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20metrics%3D%5B'accuracy'%5D)%0A%20%20%20%20%20%20%20%20return%20model%0A%20%20%20%20return%20(get_model%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%23%205.%20Training%3A%20%0A%20%20%20%20%20%20%20%20Train%20for%20ten%20epochs%20which%20verbose%20%3D%200%2C%20meaning%20no%20logs.%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%23%23%20CPU%0A%20%20%20%20%20%20%20%20%20here%20-n1%20-r1%20will%20ensure%20the%20process%20will%20run%20for%20only%20one%20pass%2C%20not%20specifying%20will%20perform%20runs%20for%20few%20no%20of%20times%20and%20then%20calculate%20the%20average.%20%0A%0A%20%20%20%20%20%20%20%20%20Also%20(CPU%3A0)%20refers%20to%20the%20first%20CPU(I%20have%20only%20one).%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20Run_CPU_Model_NN%20%3D%20mo.ui.run_button(label%3D%22Run%20CPU%20Model%22%2C%20kind%3D%22danger%22)%0A%20%20%20%20Run_CPU_Model_NN%0A%20%20%20%20return%20(Run_CPU_Model_NN%2C)%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20Run_CPU_Model_NN%2C%0A%20%20%20%20X_train_scaled%2C%0A%20%20%20%20get_model%2C%0A%20%20%20%20mo%2C%0A%20%20%20%20tf%2C%0A%20%20%20%20y_train_encoded%2C%0A)%3A%0A%20%20%20%20%23%20magic%20command%20not%20supported%20in%20marimo%3B%20please%20file%20an%20issue%20to%20add%20support%0A%20%20%20%20%23%20%25%25timeit%20-n1%20-r1%0A%20%20%20%20%23%20CPU%0A%20%20%20%20mo.stop(not%20Run_CPU_Model_NN.value)%0A%20%20%20%20with%20tf.device('%2FCPU%3A0')%3A%0A%20%20%20%20%20%20%20%20model_cpu%20%3D%20get_model()%0A%20%20%20%20%20%20%20%20model_cpu.fit(X_train_scaled%2C%20y_train_encoded%2C%20epochs%20%3D%205)%0A%20%20%20%20return%20(model_cpu%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%20GPU%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20Run_GPU_Model_NN%20%3D%20mo.ui.run_button(label%3D%22Run%20GPU%20Model%22%2C%20kind%3D%22danger%22)%0A%20%20%20%20Run_GPU_Model_NN%0A%20%20%20%20return%20(Run_GPU_Model_NN%2C)%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20Run_GPU_Model_NN%2C%0A%20%20%20%20X_train_scaled%2C%0A%20%20%20%20get_model%2C%0A%20%20%20%20mo%2C%0A%20%20%20%20tf%2C%0A%20%20%20%20y_train_encoded%2C%0A)%3A%0A%20%20%20%20%23%20magic%20command%20not%20supported%20in%20marimo%3B%20please%20file%20an%20issue%20to%20add%20support%0A%20%20%20%20%23%20%25%25timeit%20-n1%20-r1%0A%20%20%20%20%23%20GPU%0A%20%20%20%20mo.stop(not%20Run_GPU_Model_NN.value)%0A%20%20%20%20with%20tf.device('%2FGPU%3A0')%3A%0A%20%20%20%20%20%20%20%20model_gpu%20%3D%20get_model()%0A%20%20%20%20%20%20%20%20model_gpu.fit(X_train_scaled%2C%20y_train_encoded%2C%20epochs%20%3D%2010)%0A%20%20%20%20return%20(model_gpu%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%20TEST%20Two%20%E2%80%93%20Training%20Clothes%20Classifier%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20Download_Data_img%20%3D%20mo.ui.run_button(label%3D%22Download%20Data%20Img%22%2C%20kind%3D%22info%22)%0A%20%20%20%20Download_Data_img%0A%20%20%20%20return%20(Download_Data_img%2C)%0A%0A%0A%40app.cell%0Adef%20_(Download_Data_img%2C%20keras%2C%20mo)%3A%0A%20%20%20%20mo.stop(not%20Download_Data_img.value)%0A%20%20%20%20%23%20loading%20dataset%0A%20%20%20%20fashion_mnist%20%3D%20keras.datasets.fashion_mnist%0A%20%20%20%20(train_images%2C%20train_labels)%2C%20(test_images%2C%20test_labels)%20%3D%20fashion_mnist.load_data()%0A%0A%20%20%20%20%23%20checking%20shape%0A%0A%20%20%20%20print(train_images.shape)%0A%0A%20%20%20%20print(train_labels%5B0%5D)%0A%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20fashion_mnist%2C%0A%20%20%20%20%20%20%20%20test_images%2C%0A%20%20%20%20%20%20%20%20test_labels%2C%0A%20%20%20%20%20%20%20%20train_images%2C%0A%20%20%20%20%20%20%20%20train_labels%2C%0A%20%20%20%20)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo%2C%20plt%2C%20train_images)%3A%0A%20%20%20%20%23%20checking%20images%0A%20%20%20%20class_names%20%3D%20%5B'T-shirt%2Ftop'%2C%20'Trouser'%2C%20'Pullover'%2C%20'Dress'%2C%20'Coat'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20'Sandal'%2C%20'Shirt'%2C%20'Sneaker'%2C%20'Bag'%2C%20'Ankle%20boot'%5D%0A%20%20%20%20plt.imshow(train_images%5B0%5D)%0A%20%20%20%20mo.mpl.interactive(plt.gcf())%0A%20%20%20%20return%20(class_names%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(class_names%2C%20train_labels)%3A%0A%20%20%20%20class_names%5Btrain_labels%5B0%5D%5D%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%20Model%20Building%3A%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(keras%2C%20test_images%2C%20train_images)%3A%0A%20%20%20%20train_images_scaled%20%3D%20train_images%20%2F%20255.0%0A%20%20%20%20test_images_scaled%20%3D%20test_images%20%2F%20255.0%0A%0A%20%20%20%20def%20get_model_1(hidden_layers%3D1)%3A%0A%20%20%20%20%20%20%20%20layers%20%3D%20%5Bkeras.layers.Flatten(input_shape%3D(28%2C%2028))%5D%0A%20%20%20%20%20%20%20%20for%20i%20in%20range(hidden_layers)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20layers.append(keras.layers.Dense(500%2C%20activation%3D'relu'))%0A%20%20%20%20%20%20%20%20layers.append(keras.layers.Dense(10%2C%20activation%3D'sigmoid'))%0A%20%20%20%20%20%20%20%20model%20%3D%20keras.Sequential(layers)%0A%20%20%20%20%20%20%20%20model.compile(optimizer%3D'adam'%2C%20loss%3D'sparse_categorical_crossentropy'%2C%20metrics%3D%5B'accuracy'%5D)%0A%20%20%20%20%20%20%20%20return%20model%0A%20%20%20%20return%20get_model_1%2C%20test_images_scaled%2C%20train_images_scaled%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20If%20this%20seems%20unfamiliar%2C%20let%20me%20break%20it%20down%3A%0A%0A%20%20%20%20%20%20%20%20In%20the%20above%20code%2C%20we%20store%20layers%20as%20a%20list%20and%20then%20append%20those%20hidden%20layers%20as%20provided%20in%20the%20hidden_layers.%20Finally%2C%20we%20compile%20our%20model%20with%20adam%20as%20optimizer%20and%20sparce_categorical_crossentropy%20as%20loss%20fn.%20Metric%20to%20monitor%20is%20again%20accuracy.%0A%0A%20%20%20%20%20%20%20%20Finally%2C%20let%E2%80%99s%20train%20our%20model%20with%205%20hidden%20layers%20for%205%20epochs%3A%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%20CPU%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20Run_CPU_Model%20%3D%20mo.ui.run_button(label%3D%22Run%20CPU%20Model%22%2C%20kind%3D%22danger%22)%0A%20%20%20%20Run_CPU_Model%0A%20%20%20%20return%20(Run_CPU_Model%2C)%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20Run_CPU_Model%2C%0A%20%20%20%20get_model_1%2C%0A%20%20%20%20mo%2C%0A%20%20%20%20tf%2C%0A%20%20%20%20train_images_scaled%2C%0A%20%20%20%20train_labels%2C%0A)%3A%0A%20%20%20%20mo.stop(not%20Run_CPU_Model.value)%0A%0A%20%20%20%20%23%20Model%20Training%20with%20CPU%0A%20%20%20%20with%20tf.device('%2FCPU%3A0')%3A%0A%20%20%20%20%20%20%20%20cpu_model%20%3D%20get_model_1(hidden_layers%3D5)%0A%20%20%20%20%20%20%20%20cpu_model.fit(train_images_scaled%2C%20train_labels%2C%20epochs%3D5)%0A%20%20%20%20return%20(cpu_model%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%20GPU%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20Run_GPU_Model%20%3D%20mo.ui.run_button(label%3D%22Run%20GPU%20Model%22%2C%20kind%3D%22danger%22)%0A%20%20%20%20Run_GPU_Model%0A%20%20%20%20return%20(Run_GPU_Model%2C)%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20Run_GPU_Model%2C%0A%20%20%20%20get_model_1%2C%0A%20%20%20%20mo%2C%0A%20%20%20%20tf%2C%0A%20%20%20%20train_images_scaled%2C%0A%20%20%20%20train_labels%2C%0A)%3A%0A%20%20%20%20mo.stop(not%20Run_GPU_Model.value)%0A%0A%20%20%20%20%23%20Model%20Training%20with%20GPU%0A%20%20%20%20with%20tf.device('%2FGPU%3A0')%3A%0A%20%20%20%20%20%20%20%20gpu_model%20%3D%20get_model_1(hidden_layers%3D5)%0A%20%20%20%20%20%20%20%20gpu_model.fit(train_images_scaled%2C%20train_labels%2C%20epochs%3D5)%0A%20%20%20%20return%20(gpu_model%2C)%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
6bdd23a15c37a6e961223ed3b76abc5fe702a3482bbc6b083bab0670d3aa99d2